#include <iostream>
using namespace std;

int f[505];
int n, m, k;
bool is_lost[505];

struct Edge
{
    int s, e;
} edges[250005];

// 初始化并查集父节点
void init()
{
    for (int i = 0; i < n; i++)
    {
        f[i] = i;
    }
}

// 找到父节点
int find(int i)
{
    if (f[i] == i)
    {
        return i;
    }
    return f[i] = find(f[i]);
}

// 合并两个城市
void merge(int a, int b)
{
    int fa = find(a);
    int fb = find(b);
    if (fa == fb)
    {
        return;
    }
    f[fa] = fb;
}

// 获取现在连通城市数
int Ucnt()
{
    int cnt = 0;
    for (int i = 0; i < n; i++)
    {
        if (f[i] == i && !is_lost[i])//因为标记了is_lost的节点的父亲也会初始化为自己，要排除
        {
            cnt++;
        }
    }
    return cnt;
}

int main()
{
    cin >> n >> m;
    init();
    for (int i = 0; i < m; i++)
    {
        int a, b;
        cin >> a >> b;
        edges[i].s = a;//把边存下来后面可以继续初始化
        edges[i].e = b;
        merge(a, b);
    }
    cin >> k;
    bool toover = false;
    if (k == n)
    {
        // 标记最后会over
        toover = true;
    }
    int lc = Ucnt();//lc上一次的集合数，nc当前的集合数
    for (int i = 0; i < k; i++)
    {
        int city, nc;
        cin >> city;
        is_lost[city] = true;
        //重新初始化并查集，所有和city城市有连接的关系都不会进入并查集
        //没有标记is_lost的、本来仅通过city城市和其他集合成为一个集合的城市（或集合）会自己单独成为一个集合（父节点是自己）
        init();
        for (int i = 0; i < m; i++)
        {
            int a = edges[i].s;
            int b = edges[i].e;
            if (!is_lost[a] && !is_lost[b])//判断该边合理性
            {
                merge(a, b);
            }
        }
        nc = Ucnt();
        if (nc > lc)
        {
            cout << "Red Alert: City " << city << " is lost!" << endl;
        }
        else
        {
            cout << "City " << city << " is lost." << endl;
        }
        lc = nc;
    }
    if (toover)
    {
        cout << "Game Over.";
    }
    return 0;
}